/**
 * Copyright (c) subnew
 * Licensed under the GPL;
 * @email:joseanluo@gmail.com
 * @Title: BaseException.java
 * @Package com.subnew.copyman.frame.exception
 */
package com.subnew.mango.frame.exception;

/**
 * 基本异常, 继承自RuntimeException（Uncheck Exception）.<br>
 * 从由Spring管理事务的函数中抛出时会触发事务回滚.
 * 
 * @author JoseanLuo
 * @date 2014年8月28日 上午10:56:09
 * @version V1.0
 */
@SuppressWarnings("serial")
public class BaseException extends RuntimeException {
	/**
	 * 异常状态码
	 */
	protected Integer code;
	/**
	 * 异常信息对象
	 */
	protected String description;
	/**
	 * 异常源
	 */
	protected Throwable rootCause;

	/**
	 * 无参构造，方便子类构造方法不明文主动调用父类（子类初始化会先调用父类构造方法，没有指定则调用父类无参构造方法）
	 */
	public BaseException() {
		super();
	}

	/**
	 * 构造方法
	 * 
	 * @param description   异常信息
	 */
	public BaseException(String description) {
		super(description);
		this.description = description;
	}

	/**
	 * 构造方法
	 * 
	 * @param cause    异常源
	 */
	public BaseException(Throwable cause) {
		super(cause);
		this.rootCause = cause;
	}

	/**
	 * 构造方法
	 * 
	 * @param description  异常信息
	 * @param cause 异常源
	 */
	public BaseException(String description, Throwable cause) {
		super(description, cause);
		this.rootCause = cause;
		this.description = description;
	}

	/**
	 * 构造方法
	 * 
	 * @param code
	 *            异常状态码
	 * @param description
	 *            异常信息
	 * @param cause
	 *            异常源
	 */
	public BaseException(Integer code, String description, Throwable cause) {
		super(description, cause);
		this.code=code;
		this.description=description;
		this.rootCause=cause;

	}

	/**
	 * 构造方法
	 * 
	 * @param code     异常状态码
	 * @param description 异常信息
	 */
	public BaseException(Integer code, String description) {
		super(description);
		this.code=code;
		this.description=description;
		

	}
    /**
     * 
    * 构造方法
    * @param _enum 异常枚举。
     */
	public BaseException(ExceptionEnum _enum) {
		this(_enum.getCode(), _enum.getDescription());
	}
	/**
	 * 
	* 构造方法
	* @param _enum 异常枚举。
	* @param cause 异常源
	 */
	public BaseException(ExceptionEnum _enum,Throwable cause){
     this(_enum.getCode(), _enum.getDescription(), cause);		
	}
	
	/**
	 * 取得出错码
	 */
	public Integer getCode() {
		return code;
	}
	/**
	 * 取得出错信息
	 */
	public Object getDescription() {
		return description;
	}

	@Override
	public String toString() {
		return "出错代码："+code+",<br>异常信息信息："+description;
	}
}
